core: Fix regression when committing symlinks in archive mode
authorColin Walters <walters@verbum.org>
Fri, 24 Feb 2012 14:58:45 +0000 (09:58 -0500)
committerColin Walters <walters@verbum.org>
Fri, 24 Feb 2012 15:05:26 +0000 (10:05 -0500)
Commit 802959f398bfc0c7acac9252e7a8f1a021884ce8 broke this because it
made all archived content files be S_IFREG, which is clearly wrong.

src/libostree/ostree-core.c
src/libostree/ostree-repo.c

index 9f48c311fbbc93688d8c4cb08458fdc6916f87e9..30bda716bb9acb1790e20aa1efd7fd6332e649bb 100644 (file)
@@ -684,9 +684,12 @@ ostree_create_file_from_input (GFile            *dest_file,
   if (g_cancellable_set_error_if_cancelled (cancellable, error))
     return FALSE;
 
-  if (finfo != NULL && !is_archived_content)
+  if (finfo != NULL)
     {
       mode = g_file_info_get_attribute_uint32 (finfo, "unix::mode");
+      /* Archived content files should always be 0644 */
+      if (is_archived_content)
+        mode = (mode & S_IFMT) | 0644;
     }
   else
     {
index 3dbdc4d66b7214b7dcf68aece0830007cb6f5866..67057d52ecd9931e739e46fb557f3d4b0a57c6d4 100644 (file)
@@ -938,8 +938,9 @@ impl_stage_archive_file_object_from_raw (OstreeRepo         *self,
                                            cancellable, error))
     goto out;
 
-  if (ret_checksum)
+  if (out_checksum)
     {
+      g_assert (ret_checksum);
       ostree_checksum_update_stat (ret_checksum,
                                    g_file_info_get_attribute_uint32 (file_info, "unix::uid"),
                                    g_file_info_get_attribute_uint32 (file_info, "unix::gid"),